package com.xfp.controller;

import com.xfp.pojo.dto.RoleDto;
import com.xfp.pojo.dto.UserDto;
import com.xfp.pojo.dto.UserQueryDto;
import com.xfp.pojo.dto.UserWorkPageDto;
import com.xfp.pojo.entity.Role;
import com.xfp.pojo.entity.User;
import com.xfp.pojo.vo.*;
import com.xfp.result.Result;
import com.xfp.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.function.LongFunction;

@RestController
@RequestMapping("/api/user-service/")
@Slf4j
@Api("人员管理")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/search")
    @ApiOperation("人员搜索")
    public UserQueryVo pageUser(UserQueryDto dto) {
        log.info("人员搜索:{}",dto);
        UserQueryVo vo  = userService.pageUser(dto);
        return vo;
    }

    /**
     * 新增人员-角色列表
     */
    @GetMapping("/role")
    @ApiOperation("角色列表")
    public List<Role> queryRole(RoleDto dto){
        log.info("查询角色列表");
        List<Role> list = userService.queryRole(dto);
        return list;
    }

    /**
     * 新增人员
     */
    @PostMapping("/user")
    @ApiOperation("新增人员")
    public Boolean insertUser(@RequestBody UserDto dto){
        log.info("新增人员：{}",dto);
        userService.insertUser(dto);
        return true;
    }

    /**
     * 修改人员
     */
    @PutMapping("/user/{id}")
    @ApiOperation("修改人员")
    public Boolean updateUser(@PathVariable Long id, @RequestBody UserDto dto){
        log.info("修改人员：{}",dto);
        userService.updateUser(id,dto);
        return true;
    }

    /**
     * 获取用户基本信息
     */
    @GetMapping("/user/{id}")
    @ApiOperation("获取用户基本信息")
    public UserVo findUserById(@PathVariable Integer id){
        log.info("获取用户基本信息");
        UserVo vo = userService.findUserById(id);
        return vo;
    }

    /**
     * 删除人员
     */
    @DeleteMapping("/user/{id}")
    @ApiOperation("删除人员")
    public Boolean deleteUser(@PathVariable Long id){
        log.info("删除人员:{}",id);
        userService.deleteUser(id);
        return true;
    }

    /**
     * 人员工作量列表
     */
    @GetMapping("/searchaUserWork")
    @ApiOperation("人员工作量")
    public SearchUserWorkVo searchUserWork(UserWorkPageDto dto ){
        log.info("计算人员工作量：{}",dto);
        SearchUserWorkVo vo = userService.searchUserWork(dto);
        return vo;
    }

    /**
     * 根据售货机获取运营人员列表
     */
    @GetMapping("/user/operatorList/{innerCode}")
    @ApiOperation("根据售货机获取运营人员列表")
    public List<UserOperatorList> operatorList(@PathVariable String innerCode){
        log.info("根据售货机获取运营人员列表");
        List<UserOperatorList> list = userService.operatorList(innerCode);
        return list;
    }

    /**
     * 根据售货机获取维修人员列表
     */
    @GetMapping("/user/repairerList/{innerCode}")
    @ApiOperation("根据售货机获取运营人员列表")
    public List<UserOperatorList> repairerListList(@PathVariable String innerCode){
        log.info("根据售货机获取运营人员列表");
        List<UserOperatorList> list = userService.repairerList(innerCode);
        return list;
    }
}
